/*----------------------------------------------------------------------------------------
*
*  Copyright 2019, Gao Hai Hui, <fromzeropoint@126.com>.  All rights reserved.
*  https://gitee.com/helloworldghh/xoskit.git
*  Use of this source code is governed by a MIT license
*  that can be found in the License file.
*
----------------------------------------------------------------------------------------*/
#include "../import/head.h"
#include "../impl/head.h"
#include "common.h"
#include "json.h"
#include "core.h"

namespace xos_container
{

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// 

    static xos_json::i_json_mgr * json_mgr_ptr = 0;
    static xos::i_dynamic * xos_module = 0;

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// 

    json::json()
    {
    }

    json::~json()
    {
        term();
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 

	xos_json::i_json_mgr * json::get()
	{
		return json_mgr_ptr;
	}

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// 

    int json::init()
    {
        int ret = 0;

        xos_json::f_create fun = 0;

        if( 0 == ret )
        {
            xos_module = core::get()->dynamic();
        }

        if( 0 == ret )
        {
            ret = xos_module->load_and_get( ( void** )&fun, 
                core::get()->exe_path(),
                "xos_json",
                "create" );
        }

        if( 0 == ret )
        {
            ret = fun( mgr::container(), &json_mgr_ptr);
        }

        return ret;
    }

    int json::term()
    {
        int ret = 0;

        xos_stl::release_interface( json_mgr_ptr );
        xos_stl::release_interface( xos_module );

        return ret;
    }

} // xos_container
